package com.coderman.infosys.auth.api.dto.system.request;

import com.coderman.infosys.plat.auth.common.dto.PageDTO;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * Description:系统查询对象
 * 假设有以下场景要查询
 * 1.按业务方给的字段属性查
 * 2.按聚合维度查询整个system内部聚合
 * 其实system-module-menu就是一颗树
 *
 * 由于是多个维度的查询，所以构建查询对象的时候就比较合适使用建造者模式来降低构建复杂度
 * date: 2022/1/8
 *
 * @author shenshuai
 * @version 1.0.0
 * @since JDK 1.8
 */
@Data
@Builder
public class SystemQueryRequestDTO implements Serializable {
    /**
     * 假设要按属性查询
     */
    private List<String> queryFieldList;

    /**
     * 通过系统名称查询
     */
    private String systemName;

    /**
     * 通过系统编码查询
     */
    private String systemCode;

    /**
     * 是否优先查找缓存
     */
    private boolean loadWithCache = false;

    /**
     * 是否构建聚合对象dto
     */
    private boolean loadWithAggreate = false;

    /**
     * 这里是否查询所有系统信息不包含每个系统关联的内部对象如menu
     */
    private boolean loadAllList = false;

    /**
     * 通过模糊搜索系统编码或者系统名称查询
     */
    private String search;

    //是否分页查询
    //这里分页查询也可以封装，但是也可以单独列一个接口
    //PageDTO有对于分页查询本身的查询要求
    //private PageDTO pageDTO;

    //比如有如下需求
    //根据多个系统编码systemCode查询系统列表，不包含每个系统关联的内部对象如menu,那需要做哪些改动？？


}
